<?php
namespace app\common\model;

use think\Exception;
use think\Model;
use think\facade\{Db};

class Base extends Model
{
    protected $autoWriteTimestamp = true;
    
    /**
     * 单条查询
     * @param array  $where   查询条件
     * @param string $field   查询字段
     * @param string $order   排序字段
     * @return array
     */
    public static function getFind($where, $field = '*', $order = '')
    {
        $info = self::where($where)->field($field)->order($order)->find();
        if(!$info) $info = false;
        return $info;
    }

    /**
     * 列表查询
     * @param array  $where    查询条件
     * @param string $field    查询字段
     * @param string $order    排序字段
     * @param int $is_page  0关闭分页  1开启分页
     * @param int $curr     页数
     * @param int $limit    条数
     * @return array
     */
    public static function getList($where = [], $is_page = 0, $curr = 1, $limit = 10, $field='*', $order = '')
    {
        $res = self::field($field)->where($where)->order($order);

        if ($is_page == 1) {
            $page = ($curr - 1) * $limit;
            $res = $res->limit($page, $limit);
        }

        $res = $res->select();

        if ($res->isEmpty()) $res = false;
        return $res;
    }

    /**
     * 添加数据
     * @param string $field 过滤字段
     * @param array  $data  添加数据
     * @return array
     */
    public static function add($data, $field = [])
    {
        $res = self::create($data, $field);
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 批量添加数据
     * @param array $data 添加数据
     * @return array
     */
    public static function addAll($data)
    {
        $res = self::insertAll($data);
        if(false === $res) $res = false;
        return true;  
    }

    /**
     * 更新数据(带主键)
     * @param array $data   更新数据
     * @return array
     */
    public static function edit($data)
    {
        $res = self::update($data);
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 更新数据(不带主键)
     * @param array $data   更新数据
     * @param array $where  更新条件
     * @return array
     */
    public static function editWhere($data, $where= [])
    {
        $res = self::where($where)->update($data);
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 批量更新数据
     * @param array $data  带更新条件的数据
     * @return array
     */
    public static function editAll($data)
    {
        $res = self::isUpdate(true)->saveAll($data);
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 删除数据
     * @param  string $where 删除的条件
     * @return array
     */
    public static function del($where)
    {
        $res = self::where($where)->delete();
        if (!$res) $res = false;
        return $res;
    }

    /**
     * 查询数量
     * @param array $where 查询条件
     * @return array
     */
    public static function getNum($where = [])
    {
        return self::where($where)->count();
    }

    /**
     * 统计和
     * @param array $where 查询条件
     * @return array
     */
    public static function getSum($where = [], $field)
    {
        return self::where($where)->sum($field);
    }

    /**
     * 获取某个字段值
     * @param array  $where  查询条件
     * @param string $value  查询字段
     * @param string $order  排序字段
     * @return array
     */
    public static function getVal($where = [], $value, $order = '')
    {
        $res = self::where($where)->order($order)->value($value);
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 获取某个列
     * @param array  $where  查询条件
     * @param string $value  查询字段
     * @return array
     */
    public static function getCol($where = [], $value)
    {
        $res = self::where($where)->column($value);
        if (false === $res) $res = false;
        return $res;
        
    }

    /**
     * 字段自减
     * @param array  $where  查询条件
     * @param string $field  修改字段
     * @param int    $num    自减数量
     * @return array
     */
    public static function setDecField($where = [], $field, $num = 1)
    {
        $res = self::where($where)->dec($field, $num)->update();
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 字段自增
     * @param array  $where  查询条件
     * @param string $field  修改字段
     * @param int    $num    自增数量
     * @return array
     */
    public static function setIncField($where = [], $field, $num = 1)
    {
        $res = self::where($where)->inc($field, $num)->update();
        if (false === $res) $res = false;
        return $res;
    }

    /**
     * 开启事务
     */
    public static function beginTrans()
    {
        Db::startTrans();
    }

    /**
     * 提交事务
     */
    public static function commitTrans()
    {
        Db::commit();
    }

    /**
     * 回滚事务
     */
    public static function rollbackTrans()
    {
        Db::rollback();
    }
}